/***************************************************************************
 创建者: 李文友
 开始时间: 2018.9.10
 copyright: (C) 华友高科
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) 李文友 2018.5.8 类的具体实现代码编写

 ***************************************************************************
 *  @file batterymonitor.h
 *  功能: 电池模块的设置和数据获取
 *
 *
 ***************************************************************************/
#ifndef BATTERYMONITOR_H
#define BATTERYMONITOR_H
#include <qvector.h>
#include <qstring.h>
#include <QList>
#include <qmap.h>
#include <QMutex>
#include <QString>
#include <QTimer>

#include <QSerialPort>
/**
 * @brief The SerialPortConfig struct   串口配置参数
 */
struct SerialPortConfig:QSerialPort
{
    /**
     * @brief busType           总线类型
     */
    int busType;
    /**
     * @brief serialDeviceName  串口设备名
     */
    QString serialDeviceName;
    /**
     * @brief isUseUsbDeviceSerialCode 是否使用ｕｓｂ串口线序列号识别
     */
    int isUseUsbDeviceSerialCode;
    /**
     * @brief baudRate          波特率
     */
    BaudRate baudRate;
    /**
     * @brief dataBits          数据位
     */
    DataBits dataBits;
    /**
     * @brief parity            校验位
     */
    Parity   parity;
    /**
     * @brief stopBits          停止位
     */
    StopBits stopBits;
    /**
     * @brief updatePeriod      更新周期
     */
    int updatePeriod;

};


class QSerialPort;



/**
 * @brief The BatteryMonitor class          电池监控,监控电池的各种状态信息
 */
class GrblAdapter:public QObject
{
    Q_OBJECT
public:
    GrblAdapter(QString serialDeviceNameIn);
public:

    bool isInitialOk();

private:
    int initalSerialPort();


private:

    void* threadRun(void *);
    static void* threadTask( void* classPtr );
    void createThread();

    void* threadRun2(void *);
    static void* threadTask2( void* classPtr );
    void createThread2();

private slots:
    void timeOut_slot();

    int receiveData();


private:

    /**
     * @brief serialPort_device                串口对象
     */
    QSerialPort *serialPort_device;

    /**
     * @brief serialPortConfig          串口配置對象
     */
    SerialPortConfig *serialPortConfig;

    /**
     * @brief timer                     定时器
     */
    QTimer timer;
    bool isInitialOkStatus;



};

#endif // BATTERYMONITOR_H
